local clangd_cmd = {
  "clangd",
  "--background-index",
  "--clang-tidy",
  "--header-insertion=iwyu",
  "--completion-style=detailed",
  "--function-arg-placeholders",
  "--fallback-style=llvm",
}
if vim.g.is_windows then
  table.insert(
    clangd_cmd,
    "--query-driver=D:\\Source\\mingw64\\bin\\c++.exe,D:\\Source\\mingw64\\bin\\gcc.exe"
  )
end

return {

  -- Add C/C++ to treesitter
  {
    "nvim-treesitter/nvim-treesitter",
    opts = function(_, opts)
      if type(opts.ensure_installed) == "table" then
        vim.list_extend(opts.ensure_installed, { "c", "cpp" })
      end
    end,
  },

  -- {
  --   "p00f/clangd_extensions.nvim",
  --   lazy = true,
  --   config = function() end,
  --   opts = {
  --     extensions = {
  --       inlay_hints = {
  --         inline = false,
  --       },
  --       ast = {
  --         --These require codicons (https://github.com/microsoft/vscode-codicons)
  --         role_icons = {
  --           type = "",
  --           declaration = "",
  --           expression = "",
  --           specifier = "",
  --           statement = "",
  --           ["template argument"] = "",
  --         },
  --         kind_icons = {
  --           Compound = "",
  --           Recovery = "",
  --           TranslationUnit = "",
  --           PackExpansion = "",
  --           TemplateTypeParm = "",
  --           TemplateTemplateParm = "",
  --           TemplateParamObject = "",
  --         },
  --       },
  --     },
  --   },
  -- },

  -- Correctly setup lspconfig for clangd 🚀
  {
    "neovim/nvim-lspconfig",
    opts = {
      servers = {
        -- Ensure mason installs the server
        clangd = {
          keys = {
            { "<leader>cR", "<cmd>ClangdSwitchSourceHeader<cr>", desc = "Switch Source/Header (C/C++)" },
          },
          root_dir = function(fname)
            return require("lspconfig.util").root_pattern(
              "Makefile",
              "configure.ac",
              "configure.in",
              "config.h.in",
              "meson.build",
              "meson_options.txt",
              "build.ninja"
            )(fname) or require("lspconfig.util").root_pattern("compile_commands.json", "compile_flags.txt")(
              fname
            ) or require("lspconfig.util").find_git_ancestor(fname)
          end,
          capabilities = {
            offsetEncoding = { "utf-16" },
          },
          cmd = clangd_cmd,
          init_options = {
            usePlaceholders = true,
            completeUnimported = true,
            clangdFileStatus = true,
          },
        },
      },
      setup = {
        -- clangd = function(_, opts)
        --   local clangd_ext_opts = require("util").opts("clangd_extensions.nvim")
        --   require("clangd_extensions").setup(vim.tbl_deep_extend("force", clangd_ext_opts or {}, { server = opts }))
        --   return true
        -- end,
      },
    },
  },

  -- {
  --   "nvim-cmp",
  --   opts = function(_, opts)
  --     table.insert(opts.sorting.comparators, 1, require("clangd_extensions.cmp_scores"))
  --   end,
  -- },

  -- {
  --   "mfussenegger/nvim-dap",
  --   optional = true,
  --   dependencies = {
  --     -- Ensure C/C++ debugger is installed
  --     "williamboman/mason.nvim",
  --     optional = true,
  --     opts = function(_, opts)
  --       if type(opts.ensure_installed) == "table" then
  --         vim.list_extend(opts.ensure_installed, { "codelldb" })
  --       end
  --     end,
  --   },
  --   opts = function()
  --     local dap = require("dap")
  --     if not dap.adapters["codelldb"] then
  --       require("dap").adapters["codelldb"] = {
  --         type = "server",
  --         host = "localhost",
  --         port = "${port}",
  --         executable = {
  --           command = "codelldb",
  --           args = {
  --             "--port",
  --             "${port}",
  --           },
  --         },
  --       }
  --     end
  --     for _, lang in ipairs({ "c", "cpp" }) do
  --       dap.configurations[lang] = {
  --         {
  --           type = "codelldb",
  --           request = "launch",
  --           name = "Launch file",
  --           program = function()
  --             return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/", "file")
  --           end,
  --           cwd = "${workspaceFolder}",
  --         },
  --         {
  --           type = "codelldb",
  --           request = "attach",
  --           name = "Attach to process",
  --           processId = require("dap.utils").pick_process,
  --           cwd = "${workspaceFolder}",
  --         },
  --       }
  --     end
  --   end,
  -- },
}
